package com.sgj.lock;

import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * list线程不安全问题解决方案
 * @Author: Guoji Shen
 * @Date: 2021/8/5 13:20
 */
public class ListThreadDemo {

    public static void main(String[] args) {
        // 创建ArrayList集合(不安全)
        // List<String> list = new ArrayList<>();

        // 创建Vector集合(线程安全，但由于是jdk1.0的解决方案，已经用的很少)
        // List<String> list = new Vector<>();

        // Collections解决(也比较古老，不建议使用)
        // List<String> list = Collections.synchronizedList(new ArrayList<>());

        // JUC提供的解决方案  CopyOnWriteArrayList
        List<String> list = new CopyOnWriteArrayList<>();

        for (int i = 0; i < 30; i++) {
            new Thread(() -> {
                // 向集合添加内容
                list.add(UUID.randomUUID().toString().substring(0, 8));
                System.out.println(list);
            }, String.valueOf(i)).start();
        }
    }
}